package java0827;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class FileDemo3 {
    public static void main(String[] args) throws IOException {
        //1、让用户指定一个待扫描的根目录和要查询的关键词
        System.out.println("请输入要扫描的根目录（绝对路径）：");
        Scanner scanner = new Scanner(System.in);
        String root = scanner.next();
        File rootDir = new File(root);
        if (!rootDir.isDirectory()){
            System.out.println("您输入的路径错误！");
            return;
        }
        System.out.println("请输入要查找的文件名中包含的关键词：");
        String token = scanner.next();

        //2、递归遍历目录
        //result表示递归遍历的结果，就包含着所有带有token关键词的文件名
        List<File> ret = new ArrayList<>();
        scanDir(rootDir, token, ret);

        //3、遍历ret，问用户是否要删除该文件，根据用户的输入决定是否要删除
        for (File f : ret){
            System.out.println(f.getCanonicalPath() + "是否要删除？(Y/N)");
            String input = scanner.next();
            if(input.equals("Y")){
                f.delete();
            }
        }

    }
        //递归的来遍历目录，找出里面所有符合条件的文件
    private static void scanDir(File rootDir, String token, List<File> ret) throws IOException {
        //list返回的是一个文件名String,使用listFiles直接得到的是File对象，用起来更方便一下
        File[] files = rootDir.listFiles();
        if (files == null || files.length == 0){
            //当前目录为空
            return;
        }
        for (File f : files){
            if (f.isDirectory()){
                //如果当前的文件是一个目录，就递归的进行查找
                scanDir(f,token,ret);
            }else{
                //如果当前文件是一个普通的文件，就判定这个文件是否包含了待查找的关键词
                if(f.getName().contains(token)){
                    ret.add(f.getCanonicalFile());
                }
            }
        }
        rootDir.listFiles();
    }
}
